home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / usr / include / rpc / rpc_msg.h < prev    next >
C/C++ Source or Header  |  2009-10-07  |  5KB  |  199 lines

  1. /*
  2.  * rpc_msg.h
  3.  * rpc message definition
  4.  *
  5.  * Copyright (C) 1984, Sun Microsystems, Inc.
  6.  *
  7.  * Redistribution and use in source and binary forms, with or without
  8.  * modification, are permitted provided that the following conditions are
  9.  * met:
  10.  *
  11.  *     * Redistributions of source code must retain the above copyright
  12.  *       notice, this list of conditions and the following disclaimer.
  13.  *     * Redistributions in binary form must reproduce the above
  14.  *       copyright notice, this list of conditions and the following
  15.  *       disclaimer in the documentation and/or other materials
  16.  *       provided with the distribution.
  17.  *     * Neither the name of Sun Microsystems, Inc. nor the names of its
  18.  *       contributors may be used to endorse or promote products derived
  19.  *       from this software without specific prior written permission.
  20.  *
  21.  *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  22.  *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  23.  *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
  24.  *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
  25.  *   COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
  26.  *   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  27.  *   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
  28.  *   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  29.  *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
  30.  *   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
  31.  *   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  32.  *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  33.  */
  34.  
  35. #ifndef _RPC_MSG_H
  36. #define _RPC_MSG_H 1
  37.  
  38. #include <sys/cdefs.h>
  39.  
  40. #include <rpc/xdr.h>
  41. #include <rpc/clnt.h>
  42.  
  43. #define RPC_MSG_VERSION        ((u_long) 2)
  44. #define RPC_SERVICE_PORT    ((u_short) 2048)
  45.  
  46. __BEGIN_DECLS
  47.  
  48. /*
  49.  * Bottom up definition of an rpc message.
  50.  * NOTE: call and reply use the same overall struct but
  51.  * different parts of unions within it.
  52.  */
  53.  
  54. enum msg_type {
  55.     CALL=0,
  56.     REPLY=1
  57. };
  58.  
  59. enum reply_stat {
  60.     MSG_ACCEPTED=0,
  61.     MSG_DENIED=1
  62. };
  63.  
  64. enum accept_stat {
  65.     SUCCESS=0,
  66.     PROG_UNAVAIL=1,
  67.     PROG_MISMATCH=2,
  68.     PROC_UNAVAIL=3,
  69.     GARBAGE_ARGS=4,
  70.     SYSTEM_ERR=5
  71. };
  72.  
  73. enum reject_stat {
  74.     RPC_MISMATCH=0,
  75.     AUTH_ERROR=1
  76. };
  77.  
  78. /*
  79.  * Reply part of an rpc exchange
  80.  */
  81.  
  82. /*
  83.  * Reply to an rpc request that was accepted by the server.
  84.  * Note: there could be an error even though the request was
  85.  * accepted.
  86.  */
  87. struct accepted_reply {
  88.     struct opaque_auth    ar_verf;
  89.     enum accept_stat    ar_stat;
  90.     union {
  91.         struct {
  92.             u_long    low;
  93.             u_long    high;
  94.         } AR_versions;
  95.         struct {
  96.             caddr_t    where;
  97.             xdrproc_t proc;
  98.         } AR_results;
  99.         /* and many other null cases */
  100.     } ru;
  101. #define    ar_results    ru.AR_results
  102. #define    ar_vers        ru.AR_versions
  103. };
  104.  
  105. /*
  106.  * Reply to an rpc request that was rejected by the server.
  107.  */
  108. struct rejected_reply {
  109.     enum reject_stat rj_stat;
  110.     union {
  111.         struct {
  112.             u_long low;
  113.             u_long high;
  114.         } RJ_versions;
  115.         enum auth_stat RJ_why;  /* why authentication did not work */
  116.     } ru;
  117. #define    rj_vers    ru.RJ_versions
  118. #define    rj_why    ru.RJ_why
  119. };
  120.  
  121. /*
  122.  * Body of a reply to an rpc request.
  123.  */
  124. struct reply_body {
  125.     enum reply_stat rp_stat;
  126.     union {
  127.         struct accepted_reply RP_ar;
  128.         struct rejected_reply RP_dr;
  129.     } ru;
  130. #define    rp_acpt    ru.RP_ar
  131. #define    rp_rjct    ru.RP_dr
  132. };
  133.  
  134. /*
  135.  * Body of an rpc request call.
  136.  */
  137. struct call_body {
  138.     u_long cb_rpcvers;    /* must be equal to two */
  139.     u_long cb_prog;
  140.     u_long cb_vers;
  141.     u_long cb_proc;
  142.     struct opaque_auth cb_cred;
  143.     struct opaque_auth cb_verf; /* protocol specific - provided by client */
  144. };
  145.  
  146. /*
  147.  * The rpc message
  148.  */
  149. struct rpc_msg {
  150.     u_long            rm_xid;
  151.     enum msg_type        rm_direction;
  152.     union {
  153.         struct call_body RM_cmb;
  154.         struct reply_body RM_rmb;
  155.     } ru;
  156. #define    rm_call        ru.RM_cmb
  157. #define    rm_reply    ru.RM_rmb
  158. };
  159. #define    acpted_rply    ru.RM_rmb.ru.RP_ar
  160. #define    rjcted_rply    ru.RM_rmb.ru.RP_dr
  161.  
  162.  
  163. /*
  164.  * XDR routine to handle a rpc message.
  165.  * xdr_callmsg(xdrs, cmsg)
  166.  *     XDR *xdrs;
  167.  *     struct rpc_msg *cmsg;
  168.  */
  169. extern bool_t    xdr_callmsg (XDR *__xdrs, struct rpc_msg *__cmsg) __THROW;
  170.  
  171. /*
  172.  * XDR routine to pre-serialize the static part of a rpc message.
  173.  * xdr_callhdr(xdrs, cmsg)
  174.  *     XDR *xdrs;
  175.  *     struct rpc_msg *cmsg;
  176.  */
  177. extern bool_t    xdr_callhdr (XDR *__xdrs, struct rpc_msg *__cmsg) __THROW;
  178.  
  179. /*
  180.  * XDR routine to handle a rpc reply.
  181.  * xdr_replymsg(xdrs, rmsg)
  182.  *     XDR *xdrs;
  183.  *     struct rpc_msg *rmsg;
  184.  */
  185. extern bool_t    xdr_replymsg (XDR *__xdrs, struct rpc_msg *__rmsg) __THROW;
  186.  
  187. /*
  188.  * Fills in the error part of a reply message.
  189.  * _seterr_reply(msg, error)
  190.  *     struct rpc_msg *msg;
  191.  *     struct rpc_err *error;
  192.  */
  193. extern void    _seterr_reply (struct rpc_msg *__msg, struct rpc_err *__error)
  194.      __THROW;
  195.  
  196. __END_DECLS
  197.  
  198. #endif /* rpc/rpc_msg.h */
  199.